package online.longzipeng.sort;

import online.longzipeng.PrintUtils;

/**
 * @author lzp
 * @Date:2023/10/16
 * @description: 插入排序
 */
public class Sort3Insert {

	/**
	 * 每次选一个值，与左边已排序好的进行比较排序【不同的点在于已排序好的都往右移一位，而不是像冒泡和选择排序那样交换位置，这一点能省不少开销】
	 */
	public static void sort(int[] arr) {
		// 外循环：已排序元素数量为 1, 2, ..., n
		for (int i = 1; i < arr.length; i++) {
			int base = arr[i], j = i - 1;
			// 内循环：将 base 插入到已排序部分的正确位置
			while (j >= 0 && arr[j] > base) {
				arr[j + 1] = arr[j]; // 将 nums[j] 向右移动一位
				j--;
			}
			arr[j + 1] = base;        // 将 base 赋值到正确位置
		}
	}

	public static void main(String[] args) {
		int arr[] = new int[]{1, 9, 2, 8, 4, 3, 5, 7, 6};
		System.out.println("排序前：");
		PrintUtils.printArr(arr);
		sort(arr);
		System.out.println("排序后：");
		PrintUtils.printArr(arr);
	}
}
